package JUC.第05章_中断机制_LockSupport;

/**
 * 一个线程不应该由其他线程来强制中断或停止，而是应该由线程自己自行停止，
 * 自己来决定自己的命运。
 * 所以，Thread.stop, Thread.suspend, Thread.resume都已经被废弃了。
 *
 * 在Java中没有办法立即停止一条线程，然而停止线程却显得尤为重要，
 * 如取消一个耗时操作。
 * 因此，Java提供了一种用于停止线程的"协商"机制  中断，也即中断标识协商机制。
 * 中断只是一种协作协商机制，Java没有给中断增加任何语法，
 * 中断的过程完全需要程序员自己实现。
 * 若要中断一个线程， 你需要手动调用该线程的 interrupt 方法，
 * 该方法也仅仅是将线程对象的中断标识设成 true;
 * 接着你需要自己写代码不断地检测当前线程的标识位，如果为true，
 * 表示别的线程请求这条线程中断，
 * 此时究竞该做什么需要你自己写代码实现。
 *
 * 每个线程对象中都有一个中断标识位，用于表示线程是否被中断;
 * 该标识位为true表示中断，为false 表示未中断;
 * 通过调用线程对象的interrupt方法将该线程的标识位设为true;
 * 可以在别的线程中调用，也可以在自己的线程中调用。
 */
public class A0_什么是中断机制 {
    public static void main(String[] args) {
        Thread thread = new Thread();
        thread.start();

        // 实例方法interrupt()仅仅是设 置线程的中断状态为true,
        // 发起一个协商而不会立刻停止线程
        thread.interrupt();
        //如果线程处于正常活动状态,  仅仅是设 置线程的中断状态为true, 没任何影响
        //如果是阻塞状态  如sleep  wait  join等   会抛出中断的异常  并将中断状态清除(即中断状态改为默认的false,)


        //静态方法  判断线程是否被中断并清除当前中断状态。
        //1返回当前线程的中断状态，测试当前线程是否已被中断
        //2将当前线程的 中断状态清零并重新设为false,清除线程的中断状态
        boolean interrupted = Thread.interrupted();

        //判断当前线程的中断状态  通过中断标志位  如果此线程已经死了  则返回false 中断标志位默认值
        boolean isInterrupted = thread.isInterrupted();

    }

}
